不知不覺就快10天了
我們在第一天的基本資料型態也有提過Enum這項型態,那今天我們將要更深入的探討什麼是Enum
Enum在電腦科學領域中稱為列舉,而列舉依照維基百科的定義為
列舉是一個被命名的整型常數的集合,列舉在日常生活中很常見,例如「星期」可以做為一個集合,而其枚舉如星期一、星期二、 星期三、星期四、星期五、星期六、星期日,以上稱作星期的枚舉。通俗來說,列舉就是對一個對象的所有可能取到的值的集合
很複雜對吧,你可以直接把Enum想成是把所有不能夠以整數、浮點數、字串、布林值、Color3、Vector3、CFrame等這些資料型態來改變的屬性值全部集合起來,如果你需要使用時再呼叫他的一項函式。
來舉個最簡單的例子,今天如果你想要改變一個玩家的骨架型態 (分別有R15與R6),你無法使用其他的資料型態來更改,這個時候就可以用Enum來解決
--假設用一個物件被碰到的事件作為開頭
local Part = script.Parent
Part.Touched:Connect(function(Hit)
--我們想要在這個物件被碰到時將玩家的骨架型態改變
local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
if Player then
--在玩家碰到這個Part的時候將玩家的骨架型態改為R6
Player.Character.Humanoid.RigType = Enum.RigType.R6
end
end)
而你也不一定只能用 . 來取得Enum屬性,以下有三種方法一樣也可以取得
GetEnumItems(): 一次取得一項Enum資料中的所有屬性 (回傳一項陣列)
FromName(): 透過該屬性的名稱取得Enum屬性 (其實這就跟直接用 . 取得一樣)
FromValue(): 透過該屬性的值取得Enum屬性 (相關的值都放在Roblox Studio的Documentation裡,我基本不會用這個函式)
如果要定義玩家的攝影機,我們必須要在一份LocalScript裡定義
LocalScript是玩家客戶端專用的腳本,他只能夠在ReplicatedFirst、ReplicatedStorage、StarterGui、StarterPlayer裡面的StarterPlayerScripts這些服務裡運行。
而定義玩家攝影機的方式如
--這項程式被寫在一份localscript裡面
local Camera = workspace.CurrentCamera
這項CurrentCamera物件只能在LocalScript裡面定義,如果你使用一般的script是無法定義的,那因為我們已經定義好了Camera物件,接下來就可以更改他的各項屬性了
例如,我想要改變它的型態,讓他變成會不斷跟隨玩家的位置與旋轉角度
local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Follow
我們也可以直接把玩家的攝影機定住
local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
又或者我們可以用明天會講到的CFrame來定義玩家攝影機的位置
local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
Camera.CFrame = CFrame.new(0, 0, 0)
但要記得,如果要對玩家攝影機做任何有關物理世界的更改 (例如位置、旋轉角度等),一定要先把玩家的攝影機定住,就是用Camera.CameraType = Enum.CameraType.Scriptable
這項指令,否則將不會生效。
以下是所有玩家攝影機的型態
Fixed: 靜止不動,Enum值為0
Attach: 以固定偏移量隨物件移,隨物件旋轉而旋轉,Enum值為1
Watch: 靜止不動,但會隨物件旋轉,Enum值為2
Track: 隨主體移動但不隨主體旋轉,Enum值為3
Follow: 隨主體移動與旋轉,Enum值為4
Custom: 預設,Enum值為5
Scriptable: 啥都不會動,你要自己設定,Enum值為6
Orbital: Y軸固定,隨物件旋轉,Enum值為7
明天我們將要進入一項非常複雜的資料型態 - CFrame與Vector3
因為他真的太難了所以明天的篇幅我預感會很長